﻿#include <iostream>
using namespace std;
#include <thread>
#include <string>

//引用相关的问题
void foo1(int& x)
{
	x += 1;
}

void foo2(int* x)
{
	
	cout << *x << endl;
}

thread t;
int a = 1;//放到全局区就好了
void test1()
{
	//类似的，a只在这个函数中有效，此函数执行完毕后会释放
	/*int a = 1;*/
	t = thread(foo1, ref(a));
}


int main(void)
{
	//错误，临时变量使用后立即释放
	/*thread theThread1(foo, 1);*/

	//int a = 1;
	//thread theThread1(foo1, ref(a));//需要使用ref修饰
	//theThread1.join();
	//cout << a << endl;


	//错误例子
	//int* ptr = new int(1);
	//thread theThread2(foo2, ptr);
	//delete ptr;//立刻释放刚申请的
	//ptr = NULL;
	//theThread2.join();

	//错误例子只在这个函数中有效
	test1();
	t.join();


	return 0;
}